package com.wfit.po;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;

@Data
public class PageQuery {
    // 第几页
    private Integer pageNo;
    // 分页大小
    private Integer pageSize;
    // 排序方式
    private String sortBy;
    // 是否升序
    private Boolean isAsc;

    /**
     * 指定排序方式
     * @param orders
     * @return
     * @param <T>
     */
    public <T>  Page<T> toMpPage(OrderItem ... orders){
        // 1.分页条件
        Page<T> p = null;
        if (pageNo == null || pageSize == null) {
            p =  new Page<>();
        } else {
            p  = new Page<>(pageNo, pageSize);
        }

        // 2.排序条件
        // 2.1.先看前端有没有传排序字段
        if (sortBy != null) {
            p.addOrder(new OrderItem(sortBy, isAsc));
            return p;
        }
        // 2.2.再看有没有手动指定排序字段
        if(orders != null){
            p.addOrder(orders);
        }
        return p;
    }

    /**
     * 指定排序方式，和是否升序
     * @param defaultSortBy
     * @param isAsc
     * @return
     * @param <T>
     */
    public <T> Page<T> toMpPage(String defaultSortBy, boolean isAsc){
        return this.toMpPage(new OrderItem(defaultSortBy, isAsc));
    }

    /**
     * 按照创建时间降序排序
     * @return
     * @param <T>
     */
    public <T> Page<T> toMpPageDefaultSortByCreateTimeDesc() {
        return toMpPage("create_time", false);
    }
    /**
     * 按照更新时间降序排序
     * @return
     * @param <T>
     */
    public <T> Page<T> toMpPageDefaultSortByUpdateTimeDesc() {
        return toMpPage("update_time", false);
    }
}